package com.framework.common.dataTypeConfig.handler;

import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import com.framework.common.annotation.DataTypeTarget;
import java.util.List;

/**
 * @author 龘鵺
 * @className com.framework.web.config.dataDictConfig.handler
 * @description 自定义序列化处理器
 * @datetime 2025-01-09 11:11:11
 * @version 1.0
 */
public class ReplaceBeanSerializerModifier extends BeanSerializerModifier {

    /**
     * @param config         1 序列化配置对象
     * @param beanDesc       2 bean描述
     * @param beanProperties 3 Bean属性编写器对象
     * @return java.util.List<com.fasterxml.jackson.databind.ser.BeanPropertyWriter>
     * @title 自定义处理JSON序列化注解方法
     * @description 自定义处理JSON序列化注解方法
     * @author 龘鵺
     * @datetime 2025-01-09 11:11:11
     */
    @Override
    public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,
                                                     List<BeanPropertyWriter> beanProperties) {
        for (BeanPropertyWriter item : beanProperties) {
            // 如果序列化器为 ReplaceHandler 的话 将 Null 值也交给他处理
            DataTypeTarget dataDictTarget = item.getAnnotation(DataTypeTarget.class);
            if (dataDictTarget != null) {
                item.assignNullSerializer(item.getSerializer());
            }
//            // 如果序列化器为 ReplaceHandler 的话 将 Null 值也交给他处理
//            if (item.getSerializer() instanceof ReplaceHandler) {
//                item.assignNullSerializer(item.getSerializer());
//            }
        }
        return beanProperties;
    }

}
